package operator.filter;

import io.reactivex.Observable;
import util.RxJavaHelper;

class SingleOperator {

    public static void main(String[] args) {
//        single1();
//        single2();
        single3();
    }

    /**
     * 校验是否只发出一个元素，如果未发出任何元素，发出指定元素
     * 如果发出多个，则发出错误事件
     */
    static void single1(){
//        Observable.just(1, 2, 3)
//                .single(4)
//                .subscribe(RxJavaHelper.getSingleConsumer());
        Observable.empty()
                .single(4)
                .subscribe(RxJavaHelper.getSingleConsumer());
    }

    /**
     * 校验是否只发出一个元素，如果未发出任何元素，则结束
     * 如果发出多个，则发出错误事件
     */
    static void single2(){
        Observable.just(1, 2, 3)
                .singleElement()
                .subscribe(RxJavaHelper.getMaybeConsumer());
        Observable.empty()
                .singleElement()
                .subscribe(RxJavaHelper.getMaybeConsumer());
    }

    /**
     * 校验是否只发出一个元素，如果未发出任何元素或者发出多个则发出错误事件
     *
     */
    static void single3(){
        Observable.just(1, 2, 3)
                .singleOrError()
                .subscribe(RxJavaHelper.getSingleConsumer());
        Observable.empty()
                .singleOrError()
                .subscribe(RxJavaHelper.getSingleConsumer());
    }


}
